package com.cloud.annotation.springAnnotation.autowired;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class AutowiredTest {
    /**
     * 加载属性上会被注入
     */
    @Autowired
    private AutowiredBean autowiredBean;

    /**
     * ，@Autowired 还可以加在任何普通方法上。Spring 会调用这些方法并自动传入匹配的依赖。
     */
    @Autowired
    public void initialize(AutowiredBean autowiredBean) {
        System.out.println("initialize");
        this.autowiredBean = autowiredBean;  // 自动注入 autowiredBean
    }

    /**
     * @param autowiredBean
     * @Autowired 也可以应用于 setter 方法上，Spring 会自动调用该方法进行依赖注入。
     */
    @Autowired
    public void setAutowiredBean(AutowiredBean autowiredBean) {
        System.out.println("setAutowiredBean");
        this.autowiredBean = autowiredBean;
    }

    /**
     * @param autowiredBean
     * @Autowired 也可以作为构造函数参数使用，Spring 会自动调用该构造函数进行依赖注入，无参则不执行
     */
    @Autowired
    public AutowiredTest(AutowiredBean autowiredBean) {
        System.out.println("AutowiredBean有构造函数");
        this.autowiredBean = autowiredBean;
    }

    public AutowiredTest() {
        System.out.println("AutowiredBean无参构造函数");

    }
}
